﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include "GcmpDwgDxfInterface.h"
#include "GcmpApiDeclaration.h"

namespace gcmp
{
    struct Pdf2ImageConversionParams;
    struct Pdf2ImageResultParams;

    /// \brief 数据交换工具接口类
    class GCMP_DWG_DXF_INTERFACE_EXPORT IDataExchangeUtil
    {
    public:
        /// \brief      合并多个pdf文件为一个pdf文件
        ///
        /// \param[in]  arrSrcPdfFilePath  pdf的文件路径集合
        /// \param[in]  strDesPdfFilePath  合并后新pdf文件路径
        /// \return bool 合并成功返回true，否则返回false，可以通过IErrorManager获取错误信息
        static bool MergePdf(const std::vector<std::wstring>& arrSrcPdfFilePath, const std::wstring& strDesPdfFilePath);

        /// \brief      从pdf生成图片
        ///
        /// \param[in]  strPdfFilePath pdf文件路径
        /// \param[in]  params 转换参数
        /// \param[in]  strImageOutPath 图片导出目录（不包含文件分隔符）
        /// \param[out] pdf每一页对应的图片文件路径
        /// \return bool 成功返回true，否则返回false，可以通过IErrorManager获取错误信息
        static bool ConvertPdf2Image(const std::wstring& strPdfFilePath, const Pdf2ImageConversionParams& params, const std::wstring& strImageOutFolderPath, std::vector<std::pair<std::wstring, Pdf2ImageResultParams>>& arrImageFilePath);

        /// \brief      检查导出dwg用到的文字样式名、标注样式名、线型名、图层名、块名等符号表名字符串是否有效。名称最长可达255个字符，可以包含字母（a–z和A–Z）、数字（0–9）、下划线（_）、一些特殊字符（$、！、+、-等）、国家字符和空格，但是不可包含字符（<>/\":;?,*|=`）及使用Unicode字体创建的特殊字符
        ///
        /// \param[in]  strName 符号名
        /// \return bool 有效返回true，包含无效字符则返回false
        static bool IsValidDwgSymbolName(const std::wstring& strName);

        /// \brief      修复dwg符号名，使用下划线"_"来替换无效字符。当使用IsValidDwgSymbolName检查到dwg符号名无效时，可以使用此方法进行修复
        ///
        /// \param[in]  strOldName 符号名
        /// \param[out] strNewName 修复后的符号名
        /// \return bool 如果strOldName为空，没有任何修复，返回false，否则则返回true
        static bool RepairDwgSymbolName(const std::wstring& strOldName, std::wstring& strNewName);
    };
}
